package cn.itcast.zt.java8.model.chain.demo3;

/**
 * 创建一个Handler的抽象类，这个类里面有一个下一个Handler处理器next，还有一个Builder，这个就是用来构建链的(使用了建造者模式构建)
 * @author zhangtian105
 * @date 2023/4/19
 * @apiNote
 */
public abstract class Handler<T> {
    protected Handler<T> next ;

    private void next(Handler<T> next) {
        this.next = next ;
    }

    public abstract boolean doHandler(T t) ;

    public static class Builder<T> {
        private Handler<T> head ;
        private Handler<T> tail ;

        public Builder<T> addHander(Handler<T> handler) {
            if (this.head == null) {
                this.head = this.tail = handler ;
                return this ;
            }

            this.tail.next(handler) ;
            this.tail = handler ;
            return this ;
        }

        public Handler<T> build() {
            return this.head ;
        }
    }
}
